<?php

class WebnewAction extends Action{

    protected  $common_file_path = 'tpl/Web/resource/fun/common.php';
    protected  $common_file_dir = 'tpl/Web/resource/fun/';//为了拆分模块
    protected  $common_file_suffix = '.php';
    protected  $property = null;

    public function index(){//获取当前页面 应该具有什么样的模块
        //t 是type 是页面类型
        if(!isset($_GET['mid']) || !isset($_GET['pagetype']) || !isset($_GET['token'])) exit("错误");
        //$id = $_GET['id'];
        $mid = $_GET['mid'];
        //$pagetype = $_GET['t'];
        $pagetype = $_GET['pagetype'];
        $token = $_GET['token'];



        if($mid) {//这里的判断主要是验证是不是首页 因为所有网站的首页$mid = 0
            $menu = M('web_menu')->where(array('id' => $mid))->find();
            $sysmodel = $menu['sysmodel'];
        }else{
            $sysmodel = 'index';
        }

        //获取相对应的系统模型 会有哪些模块  要保证 存在的系统模型都应该有对应的模块  如果这个数据没有 这里无法生成 因为这个是系统的问题 所以要报错
        $pagemodel = M('web_relation')->where(array('sysmodel'=>$sysmodel,'pagetype'=>$pagetype))->find();
        if(!$pagemodel){
            $this->error('此页面暂时无法编辑');
        }
        //这个是本页面的模板  如果没有的话 应该有一个初始化的模板
        $template = M('web_page')->where(array('cid'=>$mid,'pagetype'=>$pagetype,'token'=>$token))->find();

        if(!$template){
            //如果没有 在数据库中新建一条
            $data = array();
            $data['token'] = $_GET['token'];
            $data['cid'] = $mid;
            $data['pagetype'] = $pagetype;
            M('web_page')->add($data);
        }

        //用正则替换掉里面的模块标签
        $modellist = unserialize($pagemodel['modellist']);
        $this->assign( 'modellist', $modellist );
        //生成用于拖动的模块--图标那里
        $newmodellist = $this->parseModelList($modellist);

        $this->assign('newmodellist', $newmodellist);


        //上面是公有模块 下面查找私有模块
        $privatePageModel = M('web_private_relation')->where(array('sysmodel'=>$sysmodel,'pagetype'=>$pagetype,'token'=>$token))->find();
        if($privatePageModel) {
            $privateModelList = unserialize( $privatePageModel['modellist'] );
            $privateModelList = $this->parseModelList($privateModelList);
        }else{
            $privateModelList = '';
        }

        $this-> assign('privatemodellist',$privateModelList);



        $this->parseFile(unserialize($pagemodel['modellist']));//为页面添加js css文件
        if(!$template || !$template['tempdata'] ){
            $this->assign('tempdata','[]');
        }else {
            $this->assign('tempdata', $template['tempdata']);
        }
        $this->assign('modelid',$template['modelid']);
        //$this->assign('id',$menu);
        $this->assign('mid',$mid);
        //$this->assign('t',$pagetype);
        $this->assign('pagetype',$pagetype);
        $this->assign('token',$token);

        $reg = '/\{yunweicms:\$[^\}]*\}/';
        $template['template'] = preg_replace($reg,'',$template['template']);

        $this->assign('pagehtml',$template['template']);

        //这两个参数用于有特殊参数的模块处理 有专门的类处理这个参数与模块的关系 在org/wjbweb文件夹下
        $this->assign('get',json_encode($_GET));
        $this->assign('post',json_encode($_POST));

        $this->display();
    }

    public function model(){
        $this->display();
    }

    /**
     * ajax
     *参数中还需要加token
     */
    public function getmodel(){
        //js代码不能放在这里 因为可能会造成重复
        //style标签也是一样
        //某些功能必须通过规则，协议的方式进行
        $model = $_GET['model'];
        $modelid = $_GET['modelid'];
        $id = $_GET['id'];
        $pagetype = $_GET['pagetype'];
        $token = $_GET['token'];

        //处理编辑页面的get和post参数
        $pageget = json_decode(htmlspecialchars_decode($_GET['pageget']),true);
        $pagepost = json_decode(htmlspecialchars_decode($_GET['pagepost']),true);

        $r = M('web_page')->where(array('cid'=>$id,'pagetype'=>$pagetype,'token'=>$token))->find();
        $fun = unserialize($r['funlist']);

        //新标签
        $signName = $model.$modelid;
        $sign = array('name'=>$model,'args'=>array());//每一个新标签的配置都为空 这样似乎不大好 因为这样 如果用户不编辑 那么就看不到配置的结果 所以这个要改改
        $fun[$signName] = $sign;

        $r['funlist'] = serialize($fun);
        M('web_page')->where(array('cid'=>$id,'pagetype'=>$pagetype,'token'=>$token))->save($r);

        //$sign['args'],$signName,$model,$token,$id
        //这里需要判断文件是否存在
        require_once $this->common_file_path;
        require_once $this->common_file_dir.$model.$this->common_file_suffix;
        $modelObject = new $model();

        if(!$sign['args']){
            $temp= M('web_model')->where(array('name'=>$model))->find();
            if($temp && $temp['args'] ) {
                $sign['args'] = unserialize($temp['args']);
                $sign['args'] = $this->processArgsForShow($sign['args']);//参数预处理
            }else{
                $sign['args'] = array();
            }
            $sign['args']['token'] = $token;
            $sign['args']['menu'] = $id;
        }

        import('ORG.Wjbweb.ModelArg');
        import('ORG.Wjbweb.WebData');
        $modeArg = new ModelArg();
        $specialArgs = $modeArg -> parseArgs($pageget,$pagepost,$model,$signName);
        $modelhtml = $modelObject->show($sign['args'],$signName,$model,$specialArgs);//第一次拖动进来 参数应该都是默认的 在默认的情况下进行编辑
        $str = <<<CODE
        <div style="width:100%;border:1px dotted #006da2;" id="{$signName}" signName="{$signName}" modelName="{$model}">
            <div style="position:relative;" onmouseover="showedit(this);" onmouseout="hiddeedit(this);">
                <div class="modeledit" style="position:absolute;width:80px;height:30px;left:0px;top:0px;display:none;z-index:9999;" onclick="showEditorIframe('{$model}','{$signName}');"><span class="button button-tiny button-caution button-raised">编辑</span></div>
                <div class="modeledit" style="position:absolute;width:80px;height:30px;left:75px;top:0px;display:none;z-index:9999;" onclick="delContent(this);"><span class="button button-tiny button-caution button-raised">删除</span></div>
                <div class="modeledit" style="position:absolute;width:80px;height:30px;left:150px;top:0px;display:none;z-index:9999;" onclick="moveUp(this);"><span class="button button-tiny button-caution button-raised">↑</span></div>
                <div class="modeledit" style="position:absolute;width:80px;height:30px;left:207px;top:0px;display:none;z-index:9999;" onclick="moveDown(this);"><span class="button button-tiny button-caution button-raised">↓</span></div>
                {$modelhtml}
            </div>
        </div>
CODE;

        exit($str);
    }

    /**
     * ajax
     * 这个函数应该与上面那个函数合并起来
     */
    public function initmodel(){
        $signName = $_GET['signname'];
        $id = $_GET['id'];
        $pagetype = $_GET['pagetype'];
        $token = $_GET['token'];

        //处理编辑页面的get和post参数
        $pageget = json_decode(htmlspecialchars_decode($_GET['pageget']),true);
        $pagepost = json_decode(htmlspecialchars_decode($_GET['pagepost']),true);

        //file_put_contents('b.txt',var_export($pageget,true));


        $r = M('web_page')->where(array('cid'=>$id,'pagetype'=>$pagetype,'token'=>$token))->find();
        $fun = unserialize($r['funlist']);

        $sign = $fun[$signName];
        $model = $sign['name'];
        //处理一下$sign['args']
        $sign['args'] = $this->processArgsForShow($sign['args']);

        //需要判断文件是否存在
        $root_dir = dirname(dirname(THINK_PATH));
        $file_path = $root_dir.'/'.$this->common_file_dir.$model.$this->common_file_suffix;
        if( !file_exists($file_path) ) exit;

        require_once $this->common_file_path;
        require_once $this->common_file_dir.$model.$this->common_file_suffix;
        $modelObject = new $model();

        //如果还没有设置参数 那么就用模块的默认参数 模块的默认参数 应该是在模块的表里  但是有的参数确实不好默认 因为要根据每个人的实际情况来的
        //比如像token这样的  还有就有的参数是确定栏目的 这样的默认参数也是很难设置  所以那些特殊的参数是不是应该在各个函数内部去自己处理呢
        if(!$sign['args']){
            $temp= M('web_model')->where(array('name'=>$model))->find();
            if($temp && $temp['args']) {
                $sign['args'] = unserialize($temp['args']);
            }else{
                $sign['args'] = array();
            }
            $sign['args']['token'] = $token;
            $sign['args']['menu'] = $id;
        }
        //传入参数  加 标签名 和模块名 token 和menu
        import('ORG.Wjbweb.ModelArg');
        import('ORG.Wjbweb.WebData');
        $modeArg = new ModelArg();
        $specialArgs = $modeArg -> parseArgs($pageget,$pagepost,$model,$signName);
        $modelhtml = $modelObject->show($sign['args'],$signName,$model,$specialArgs);//第一次拖动进来 参数应该都是默认的 在默认的情况下进行编辑

        $str = <<<CODE
        <div style="width:100%;border:1px dotted #006da2;" id="{$signName}" signName="{$signName}" modelName="{$model}" >
            <div style="position:relative;" onmouseover="showedit(this);" onmouseout="hiddeedit(this);">
                <div class="modeledit" style="position:absolute;width:80px;height:30px;left:0px;top:0px;display:none;z-index:9999;" onclick="showEditorIframe('{$model}','{$signName}');"><span class="button button-tiny button-caution button-raised">编辑</span></div>
                <div class="modeledit" style="position:absolute;width:80px;height:30px;left:75px;top:0px;display:none;z-index:9999;" onclick="delContent(this);"><span class="button button-tiny button-caution button-raised">删除</span></div>
                <div class="modeledit" style="position:absolute;width:80px;height:30px;left:150px;top:0px;display:none;z-index:9999;" onclick="moveUp(this);"><span class="button button-tiny button-caution button-raised">↑</span></div>
                <div class="modeledit" style="position:absolute;width:80px;height:30px;left:207px;top:0px;display:none;z-index:9999;" onclick="moveDown(this);"><span class="button button-tiny button-caution button-raised">↓</span></div>
                {$modelhtml}
            </div>
        </div>
CODE;
        //file_put_contents('a.txt','aaaa');
        exit($str);

    }


    /**
     * @param $args array 用于处理模块配置的args参数  目前只需要将字符串从htmlspecialchars 转到正常的html代码
     */
    private function processArgsForShow($args){
        foreach( $args as $key => $val ){
            if( is_string($val) ){
                $args[$key] = htmlspecialchars_decode($val);
            }
        }
        return $args;
    }

    /**
     * @param $args array  与上一个函数 一个是保存用 一个是取出用
     */
    private function processArgsForSave($args){
        foreach( $args as $key => $val ){
            if( is_string($val) ){
                $args[$key] = htmlspecialchars($val);
            }
        }
        return $args;
    }




    public function savecode(){
        $code = $_POST['code'];
        $id = $_GET['mid'];
        $t = $_GET['pagetype'];
        $tempdata = $_POST['tempdata'];
        $modelid = $_POST['modelid'];
        $token = $_POST['token'];

        $data = array();
        $data['template'] = trim(htmlspecialchars_decode($code));
        $data['tempdata'] = htmlspecialchars_decode($tempdata);
        $data['modelid'] = htmlspecialchars_decode($modelid);

//        //这一段多余了 这个是针对之前的table结构的
//        //去除掉多余的标签  因为JSON数据结构 变了 所以这里也要变
        $old = M('web_page')->where(array('cid'=>$id,'pagetype'=>$t,'token'=>$token))->find();
        $tmp = json_decode($data['tempdata'],true);
        $stay = array();
        //将这些要保留的 都放在$stay数组组

        foreach( $tmp as $key => $val ) {
            for( $j = 0; $j < count($val); $j++ ) {
                if( !( $j % 2 ) ) {
                    array_push($stay,$val[$j]);
                }
            }
        }

//        for( $i = 0; $i < count($tmp); $i++ ){//循环布局模块 table
//            for($j = 1; $j < count($tmp[$i]); $j++ ){//遍历td
//                //遍历td中的模块
//                $o = $tmp[$i][$j];//这个数组中 奇数项为标签 偶数项为模块名 如果算下标 就是偶数项下标为标签名
//                for($k = 0; $k < count($o); $k++ ){
//                    if(!($k % 2)){
//                        array_push($stay,$o[$k]);
//                    }
//                }
//            }
//        }

        //$stay 中留下来的标签 就是要保留的标签
        $new = array();
        $funlist = unserialize($old['funlist']);
        foreach($funlist as $key => $val ){
            if(in_array($key,$stay)){
                $new[$key] = $val;
            }
        }

        $funlist = serialize($new);

        $data['funlist'] = $funlist;

        $res = M('web_page')->where(array('cid'=>$id,'pagetype'=>$t,'token'=>$token))->save($data);
        if($res !== false) {
            exit("1");
        }else{
            exit("保存失败");
        }
    }

    public function showedit(){
        //针对每个模板编辑进来 都要有一个对应的处理函数去接受参数

        $model = $_GET['model'];
        $sign = $_GET['sign'];
        $id = $_GET['id'];
        $t = $_GET['t'];
        $token = $_GET['token'];

        //五大元素
        $this->assign('id',$id);
        $this->assign('t',$t);
        $this->assign('model',$model);
        $this->assign('sign',$sign);
        $this->assign('token',$token);
        //是不是这之前要调用一个函数 来解析 但是这个解析不是  就是初始化 编辑页面 先解决显示的问题 在解决编辑这边的问题
        //$this->display('./tpl/Web/resource/edit/'.$model.'.html');//用全路径的时候 要带后缀名  这里一定要打.  因为跟模板中的路径不一样 模板文件是直接相对于网站根路径了，这个是php中要用的路径
		$this->display('tpl/Web/resource/edit/'.$model.'.html');
    }


    public function  getconfig(){
        $id = $_POST['id'];
        $t = $_POST['pagetype'];
        $sign = $_POST['sign'];
        $model = $_POST['model'];
        $token = $_POST['token'];

        $data = $_POST['data'];
        $data = htmlspecialchars_decode($data);
        $data = json_decode($data,true);
        $data = $this->processArgsForSave($data);//预处理
        //file_put_contents('c.txt',var_export($data,true));

        include 'tpl/Web/resource/edit/fun.php';
        $model = $model.'edit';
        if(function_exists($model)){
            $res = $model($id,$t,$sign,$data,$token);
        }else{
            $res = saveConfig($id,$t,$sign,$data,$token);
        }

        if($res){
            exit("1");
        }else{
            exit("0");
        }
    }

    public function getconfigforall(){
        $id = $_POST['id'];
        $t = $_POST['pagetype'];
        $sign = $_POST['sign'];
        $model = $_POST['model'];
        $token = $_POST['token'];

        $data = $_POST['data'];
        $data = htmlspecialchars_decode($data);
        $data = json_decode($data,true);
        $data = $this->processArgsForSave($data);//预处理参数

        include 'tpl/Web/resource/edit/fun.php';
        $modelfun = $model.'alledit';//这个就是 全局配置的模块特殊函数    $model.edit就死 只保存当前的函数
        if(function_exists($modelfun)){
            $res = $modelfun($id,$t,$sign,$data,$token);
        }else{
            $res = saveConfigForAll($id,$t,$model,$data,$token);
        }

        if($res){
            exit("1");
        }else{
            exit("0");
        }

    }


    /**
     *获取编辑界面需要的数据  或者规定编辑界面只能编辑样式  还是不一定只能编辑样式  还是可以调用后台函数吧 每个模块一个文件 这样子来管理
     * 要设置一种传递参数的方式
     * $model  是模块名  引用以模块名为名字的文件 调用文件中 模块名为名字的函数   那个函数决定调用什么函数
     * 他们之间的通信规则 由模块的编辑页面自行决定  因为这个也是独立的
     *
     * 每个模块都应该在第一次初始化的时候传递默认参数过去  这个是根据
     */
    public function geteditdata(){
        $model = $_GET['model'];
        $args = $_POST;
        $file = 'tpl/Web/resource/edit/fun/'.$model.'.php';
        $dir =   getcwd();
        $path = $dir.$file;
        if(file_exists($path)){
            include $file;
            echo  $model($args);
        }else{
            $this->geteditdataDefault($args);
        }

    }

    /**
     * 从post那边来的参数需要有token cid pagetype sign
     * 没有相应文件的时候 这个就是默认的获取默认参数的方法 比如导航栏的数据 就比较特殊一点  如果是一般模块 那么用这个方法 调用统一的数据
     * 如果已经配置了数据 就直接从web_page中获取 如果没有配置数据 就从web_model中获取初始化数据
     * 返回模块默认数据 在web_model表中
     */
    public function geteditdataDefault($args){

        $res = M('web_page')->where(array('token'=>$args['token'],'cid'=>$args['pageid'],'pagetype'=>$args['pagetype']))->find();

        $funlist = unserialize($res['funlist']);
        //exit(var_export($res,true));
        $sign = $funlist[$args['sign']];
        $theargs = $sign['args'];
        //file_put_contents('c.txt',var_export($theargs,true));///////////////////
        $theargs = $this->processArgsForShow($theargs);
        if($theargs) {
            $theargs = json_encode($theargs);
            exit($theargs);
        }else{
            $res = M('web_model')->where(array('name'=>$sign['name']))->find();
            if($res){
                $theargs = unserialize($res['args']);
                $theargs = json_encode($theargs);
                exit($theargs);
            }else{
                exit;
            }
        }
    }

    /**
     * 这个是个显示模块的信息的准备的函数   因为之前的获取模块信息的函数复用不了
     */
    public function getdataforshow() {
        $modelname = $_GET['model'];
        $res = M('web_model')->where(array('name'=>$modelname))->find();
        if($res){
            $theargs = unserialize($res['args']);
            $theargs = json_encode($theargs);
            exit($theargs);
        }
    }


    //直接从IndexAction.class.php复制过来的两个方法 为模块添加引入的js 和css文件   稍微做了点改动
    /**
     * @param $modelList 模块数组
     */
    public function parseFile($modelList){
        //这里生成$modelListStr 改动了下
        $modelListStr = '';
        foreach($modelList as $key =>$val ){

            $modelListStr .= '\''.$val['name'].'\',';
        }

        if($modelListStr) {
            $modelListStr = trim($modelListStr,',');
            $res = M('web_model')->where('name in (' . $modelListStr . ')')->select();

            //去除为空的 将js和css文件都提取出来  重复的文件都去掉了 排序以最后一个出现的为准
            $fileConfig = array('js'=>array(),'css'=>array());
            foreach($res as $v){
                if($v){
                    $fileList = unserialize($v['file']);
                    if($fileList['js']){
                        foreach($fileList['js'] as $js=>$index){
                            $fileConfig['js'][$js] = $index;
                        }
                    }
                    if($fileList['css']){
                        foreach($fileList['css'] as $css => $index){
                            $fileConfig['css'][$css] = $index;
                        }
                    }
                }
            }

            //将js 文件 和css  文件 直接生成相应的网页字符串  首先要排序  排序首先要改变数组结构

            $jsArr = array();
            foreach($fileConfig['js'] as $key => $val ){
                array_push($jsArr,array($key,$val));
            }
            $cssArr = array();
            foreach($fileConfig['css'] as $key => $val ){
                array_push($cssArr,array($key,$val));
            }


            $jsArr = $this->quickSort($jsArr);
            $cssArr = $this->quickSort($cssArr);


            $jsStr = '';
            foreach( $jsArr as $val ){
                $jsStr .= '<script type="text/javascript" src="'.$val[0].'"></script>';
            }
            $cssStr = '';
            foreach( $cssArr as $val ){
                $cssStr .= '<link rel="stylesheet" type="text/css" href="'.$val[0].'" />';
            }

            //这里改成直接赋值
            $this->assign('jsStr',$jsStr);
            $this->assign('cssStr',$cssStr);


        }


    }

    /**
     * @param $arr $arr的形式是这样的  'file'=>index 得改改形式 改成  index =>array('file','fileindex')
     * @return array
     */
    public function quickSort($arr)
    {
        if (count($arr) > 1) {
            $k = $arr[0][1];
            $x = array();
            $y = array();
            $_size = count($arr);
            for ($i = 1; $i < $_size; $i++) {
                if ($arr[$i][1] <= $k) {
                    $x[] = $arr[$i];
                } elseif ($arr[$i][1] > $k) {
                    $y[] = $arr[$i];
                }
            }
            $x = $this->quickSort($x);
            $y = $this->quickSort($y);
            return array_merge($x, array(array($arr[0][0],$arr[0][1])), $y);
        } else {
            return $arr;
        }
    }

    /**
     * 页面模块显示函数 生成的字符串直接显示 在页面上 替换老版本的显示方式
     * 老版本是在页面中处理$modellist
     * 此函数获取模块名字 进行处理 即在数据表中只需要有模块名这个信息
     * 模块属性的数据可以暂时全部记录在这里
     * @param $modellist
     */
    public function parseModelList($modellist){
        $model = array();
        $property = $this->getModelProperty();
        $str='<div style="height:95%;overflow-y:scroll;" class="the-model-list-div"><ul>';
        foreach( $modellist as $list) {
            $str .= '<li style="float:left;"><span><img src="/tpl/static/images/'.$list['name'].'.png" ondragstart="drag(event)" id="model$'.$list['name'].'"/> <br/>'.$property[$list['name']]['name'].'</span></li>';
            $str .= "\n";
         }
        $str .= '</ul></div>';
        return $str;
    }

    /**
     * 纯粹记录一个参数 看看有没有必要将这个参数记录到其他的地方
     * 记录模块的相关属性 比如 名字 类别等等 这个数据基本上是供 parseModelList用的  从那里分离出来的
     * 目前已经记录到其他的地方了  2015/7/1
     */
    public function getModelProperty() {

        $property = array(
            "newslist01"=>array("name"=>'列表'),
            "nav01"=>array("name"=>'导航'),
            "nav02"=>array("name"=>'导航2'),
            "nav03"=>array("name"=>'导航3'),
            "content01"=>array("name"=>'内容1'),
            "content02"=>array("name"=>'内容2'),
            "footer01"=>array("name"=>'底部'),
            "imgwordlr"=>array("name"=>'左图右文'),
            "static01"=>array("name"=>'图文'),
            "static02"=>array("name"=>'图文'),
            "static03"=>array("name"=>'图文'),
            "static04"=>array("name"=>'图文'),
            "static05"=>array("name"=>'图文'),
            "static06"=>array("name"=>'图文'),
            "static07"=>array("name"=>'图文'),
            "static08"=>array("name"=>'图文'),
            "banner01"=>array("name"=>'幻灯片1'),
            "banner02"=>array("name"=>'幻灯片2'),
            "top01"=>array("name"=>'顶部'),
            "top02"=>array("name"=>'顶部'),
            "product01"=>array("name"=>'图文'),
            "product02"=>array("name"=>"产品列表"),
            "list01"=>array("name"=>'链接1'),
            "list02"=>array("name"=>'链接2'),
            "list03"=>array("name"=>'链接3'),
            "search01"=>array("name"=>'搜索'),
            "picword01"=>array("name"=>'图文'),
            "msg01"=>array("name"=>'留言'),
            "horizontalline"=>array("name"=>'水平线'),
            "verticalline"=>array("name"=>"垂直线"),
            "productlist01"=>array("name"=>"产品目录列表"),
            "productlist02"=>array("name"=>"产品目录列表"),

        );

        if(!$this->property) {
            $path = 'tpl/Web/resource/modelman/modellist.php';
            $property = require_once $path;
            $this->property = $property;
        }

        return $this->property;
    }


    public function showmodelinfo() {
        $modeltype = $_GET['modeltype'];
        $modelname = $_GET['modelname'];
        if( $modeltype == 'model' ) {
            $property = $this->getModelProperty();
            exit($property[$modelname]['name']);
        }
    }
    /**
     * 界面上查看模块修改的效果  这个函数随需调用
     * 此函数的参数应该来源于界面  因为这个是在还没有保存的时候 展示给用户看的 参数可以通过post传来
     * 必须的参数  模块的名字
     * 模块的参数 $args,$signName,$modeName,$specialArgs
     * $args 就是参数 $signName 可以随便传 因为这个是效果界面 不会影响到其他的内容不,$modelName有了，$specialArgs可以根据具体情况post过来
     * 规则是这样$_POST['args'] $_POST['modelname'] $_POST['specialArgs'] $signName 就写signName
     */
    public function modelshow(){
        //调用模块函数 传入配置参数

        $modelname = isset($_POST['modelname'])?$_POST['modelname']:'';
        //这两个是JSON数据
        $args = isset($_POST['args'])?$_POST['args']:'';

        $signName = 'signName';
        $pageget = isset($_POST['pageget'])?$_POST['pageget']:'';
        $pagepost = isset($_POST['pagepost'])?$_POST['pagepost']:'';

        $pageget = json_decode(htmlspecialchars_decode($pageget),true);
        $pagepost = json_decode(htmlspecialchars_decode($pagepost),true);
        import('ORG.Wjbweb.ModelArg');
        import('ORG.Wjbweb.WebData');
        $modeArg = new ModelArg();
        $specialArgs = $modeArg -> parseArgs($pageget,$pagepost,$modelname,$signName);


        if( !$modelname ){
            echo '出错误了 请联系管理员';
        }

        $args = json_decode(htmlspecialchars_decode($args),true );
        $args = $this->processArgsForShow($args);
        //var_dump($args);return;
        //这里还有一个小的bug  就是 比如幻灯片这种需要加载 js的 目前还不能实现 应该把加载文件哪一套 在这里也调用一下
        //需要判断一下文件是否存在
//        $cssStr = '';//暂时手工填写一下
//        $jsStr = '<script type="text/javascript" src="/tpl/Home/yunweicms/common/js/jquery-1.8.3.min.js"></script><script type="text/javascript" src="/tpl/static/superslide/jquery.SuperSlide.2.1.1.source.js"></script>';

        require_once $this->common_file_path;
        require_once $this->common_file_dir.$modelname.$this->common_file_suffix;
        $modelObject = new $modelname();
        $this->parseFile(array(array('name'=>$modelname)));//生成cssStr,jsStr
        $content = $modelObject->show($args,$signName,$modelname,$specialArgs);
        $style = '<style type="text/css">body{ margin:0;}dl,dd,ul,li{ padding:0; border:none; margin:0;}li{ list-style:none;}img{ display:block; border:none;}input{ border:none; margin:0; padding:0;}p{ border:none; margin:0;}a{ font-size:12px; text-decoration:none;}</style>';
        $str = '<html><head>'.$style.$this->cssStr.$this->jsStr.WebData::$web_style.'</head><body style="background-color: #fff;">'.$content.'</body></html>';
        echo $str;
    }

    /**
     * 生成链接的页面
     */
    public function createlink(){
        if ( !isset( $_GET['token'] ) || !isset( $_GET['objname'] )  || $_GET['objname'] == 'undefined' ) exit("错误");
        $token = $_GET['token'];
        $objname = $_GET['objname'];

        $menus = M('web_menu')->where(array('token'=>$token))->select();

        $this->assign( 'menus', $menus );
        $this->assign( 'token', $token );
        $this->assign( 'objname', $objname );

        $this->display();
    }

    /**
     * 这个函数在添加系统模型的时候 需要做适当的修改
     */
    public function getlink(){
        if(!isset($_GET['token'])) exit("错误");
        $token = $_GET['token'];
        $mid = $_POST['mid'];
        $sysmodel = $_POST['sysmodel'];
        $p = isset($_POST['p'])?$_POST['p']:1;
        $size = 1;
        //要根据栏目的系统模型到 数据表中查找
        //这里有一个问题 如果添加一个系统模型 这里岂不是要做一下变动 系统模型和表对应的数据 应该有唯一的一份
        //那也不对 一个系统模型 不仅仅是一个表的问题 而是对应了一套策略 所以暂时没有好的方法  只有在添加系统模型的时候再来修改这里


        //这个分页看样子要自己来  这个是ajax的方式  这里只要传回三个参数  数据总数 当前页数 每页大小     第一次 当前页是1 每页10个是固定的 $count是计算出来的
        if($sysmodel == 'article'){
            $data = array();

            $count = M('web_article')->where(array('token'=>$token,'menu'=>$mid))->count();
            $show = array('total'=>$count,'now'=>$p,'size'=>$size);
            $now = $size * ($p - 1);
            $articles = M('web_article')->where(array('token'=>$token,'menu'=>$mid))->limit($now.','.$size)->field('id,title')->select();
            $data['show'] = $show;
            $data['articles'] = $articles;
            $data = json_encode($data);
            exit($data);
        }

        exit("1");
    }



    //获取栏目id  用于返回栏目id到window.pageconfig中
    public function getmenuid(){

        //暂时默认是这个参数
        //按照系统模型来选择参数
        $type = isset($_GET['type'])?$_GET['type']:1; //默认是按照系统模型来分类
        $param = 'product';//选择系统模型是产品展示的目录
        $param = $_GET['param']?$_GET['param']:'product';
		if($param == 'undefined') $param = 'product';
        $key = $_GET['key'];
		$token = $_GET['token'];

        $menu = M('web_menu')->where(array('token'=>$token,'sysmodel'=>$param))->select();

        $this->assign( 'menulist', $menu );
        $this->assign( 'key', $key );

        //通过参数分开 参数决定了 应该选择哪一类的 目录  比如 参数1是类型   类型1  通过系统模型来选择  参数2是 参数的附加参数

        $this->display();

    }

}